package com.hxm.demo.test1;

/**
 * description: add a description
 *
 * @author huangxiaoming
 * @version 1.0.0
 * @date 2022/10/17 19:46:17
 */
public class TestSortedSquares {

    /**
     * 977. 有序数组的平方
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] nums = new int[]{-4, -1, 0, 3, 10};
        int[] ints = sortedSquares(nums);
        for (int i = 0; i < ints.length; i++) {
            System.out.println(ints[i]);
        }
    }

    /**
     * 给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。
     *
     * @param nums
     * @return
     */
//    public static int[] sortedSquares(int[] nums) {
//        for (int i = 0; i < nums.length; i++) {
//            nums[i] = nums[i] * nums[i];
//        }
//        int mid = 0;
//        for (int i = 0; i < nums.length; i++) {
//            for (int j = i + 1; j < nums.length; j++) {
//                if (nums[i] >= nums[j]) {
//                    mid = nums[i];
//                    nums[i] = nums[j];
//                    nums[j] = mid;
//                } else {
//                    break;
//                }
//            }
//        }
//        return nums;
//    }
    public static int[] sortedSquares(int[] nums) {
        int mid = -1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0) {
                mid = i;
            } else {
                break;
            }
        }

        int[] ans = new int[nums.length];
        int index = 0, i = mid, j = mid + 1;
        while (i >= 0 || j < nums.length) {
            if (i < 0) {
                ans[index] = nums[j] * nums[j];
                j++;
            } else if (j == nums.length) {
                ans[index] = nums[i] * nums[i];
                i--;
            } else if (nums[i] * nums[i] < nums[j] * nums[j]) {
                ans[index] = nums[i] * nums[i];
                i--;
            } else {
                ans[index] = nums[j] * nums[j];
                j++;
            }

            index++;
        }
        return ans;
    }
}
